<?session_start();
/**
 * Programa invoca el applet que firma los documentos correspondientes a los radicados seleccionados
 * @author      Sixto Angel Pinz�n
 * @version     1.0
 */
include_once "$ruta_raiz/class_control/firmaRadicado.php";
require_once("$ruta_raiz/include/db/ConnectionHandler.php");
include_once "$ruta_raiz/class_control/usuario.php";
include_once "$ruta_raiz/class_control/Radicado.php";

?>
<html>
<head>
<title>Registro de Solicitud de Firma</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="../estilos_totales.css">
</head>
<body>
<?

include "../config.php";
if (!$dependencia || !$usua_doc )   
	include "../rec_session.php";
$db = new ConnectionHandler($ruta_raiz);
$db->conn->SetFetchMode(ADODB_FETCH_ASSOC);
$objRadicado = new Radicado($db);
$pagina_sig = "cuerpoPendientesFirma.php";

$objRadicado->radicado_codigo($radicado);
$path = $objRadicado->getRadi_path();

//TEMP
$isqlDocS = "SELECT SGD_FIRRAD_DOCSOLIC FROM SGD_FIRRAD_FIRMARADS WHERE RADI_NUME_RADI = $radicado AND USUA_DOC = '$usua_doc'";
$rsDocS = $db->conn->Execute($isqlDocS);
$sgd_firrad_docsolic = $rsDocS->fields['SGD_FIRRAD_DOCSOLIC'];

//Salvamos la firma digital a disco
$pathFirma = $path . "_" . $sgd_firrad_docsolic . "_" . $usua_doc . ".p7s";
$pathAbsolutoFirma = $BODEGA_DOCUMENTOS . $pathFirma;
//print "<br><br>pathAbsolutoFirma: $pathAbsolutoFirma <br>"; break; 
$fh = fopen( $pathAbsolutoFirma, 'w') or die("No se puede crear archivo de evidencia digital");
fwrite($fh, base64_decode($firma));
fclose($fh);

//------------------------------------------------------------//
// LOgica de solicitud de estampa de tiempo                   //
//------------------------------------------------------------//

if($FirmarEstampar=='yesyes'){
	$comandoSolicitudEstampa = ""; 
	
	if ($internetProxy)
	{
		$comandoSolicitudEstampa = $rutaComandosEstampadoCronologico . $nombreComandoSolicitudEstampaProxy . " " . $rutaAccesoCertificadoDigitalDeSolicitudEstampas . " " . $passwordCertificadoDigitalDeSolicitudEstampas . " " . $URLAutoridadDeEstampado . " " . $algoritmoEstampado . " " . $pathAbsolutoFirma . " " . $pathAbsolutoFirma . ".tsr " . $proxyInternet . " " . $proxyPortInternet . " " . $rutaComandosEstampadoCronologico . " " . $rutaEjecucionJDK; 
	}
	else
	{
		$comandoSolicitudEstampa = $rutaComandosEstampadoCronologico . $nombreComandoSolicitudEstampa . " " . $rutaAccesoCertificadoDigitalDeSolicitudEstampas . " " . $passwordCertificadoDigitalDeSolicitudEstampas . " " . $URLAutoridadDeEstampado . " " . $algoritmoEstampado . " " . $pathAbsolutoFirma . " " . $pathAbsolutoFirma . ".tsr " . $rutaComandosEstampadoCronologico . " " . $rutaEjecucionJDK; 
	}	
	
	$resultadoXMLSolicitudEstampa = shell_exec($comandoSolicitudEstampa);
	/*print $comandoSolicitudEstampa;
	break;*/
	
	//Procesamos el XML de respuesta
	$xmlDocEstampado = new DOMDocument();
	$respLoadXMLEstampado = $xmlDocEstampado->loadXML(str_replace("<br>", " " ,$resultadoXMLSolicitudEstampa));
	//$respLoadXMLEstampado = $xmlDocEstampado->loadXML($resultadoXMLSolicitudEstampa);
	
	if($respLoadXMLEstampado)
	{
		$SucessEstampa = $xmlDocEstampado->getElementsByTagName( "Sucess" );
		$SucessEstampaValue = $SucessEstampa->item(0)->nodeValue;
	
		if($SucessEstampaValue==0)
		{
			$ErrorMessage = $xmlDocEstampado->getElementsByTagName( "ErrorMessage" );
			$ErrorMessageValue = $ErrorMessage->item(0)->nodeValue;
		
			$ErrorCode = $xmlDocEstampado->getElementsByTagName( "ErrorCode" );
			$ErrorCodeValue = $ErrorCode->item(0)->nodeValue;
		
			unlink($pathAbsolutoFirma);	
			unlink($pathAbsolutoFirma.".tsr");
		
			?>
				<script language="javascript">
					alert("Se presentaron problemas en la solicitud de la estampa de tiempo.\n\nCOdigo de error: <?=trim($ErrorCodeValue)?> \nMensaje de error: <?=trim($ErrorMessageValue)?>");
					//window.location.href = "../firma/<?=$pagina_sig?>?<?=$encabezado?>"
				</script>
			<?
			exit;
		}
		else
		{
			$TimeStampGeneralInfo = $xmlDocEstampado->getElementsByTagName( "TimeStampGeneralInfo" );
			$TimeStampGeneralInfoValue = $TimeStampGeneralInfo->item(0)->nodeValue;
			
			$values2["SGD_ESTAMPA_DIGITAL"] = "'" . $pathFirma . ".tsr'";
			$values2["SGD_INFO_ESTAMPA"] = "'" . trim($TimeStampGeneralInfoValue) . "'";
			$recordWhere["RADI_NUME_RADI"] = $radicado;
			$recordWhere["USUA_DOC"] = "'" . $usua_doc . "'";
			$rs=$db->update("SGD_FIRRAD_FIRMARADS", $values2, $recordWhere);
	
			if( !$rs )
			{
				unlink($pathAbsolutoFirma);	
				unlink($pathAbsolutoFirma.".tsr");
				?>
					<script language="javascript">
						alert("No se pudo llevar a cabo el almacenamiento de la estampa de tiempo solicitada para la transacciOn.");
						window.location.href = "../firma/<?=$pagina_sig?>?<?=$encabezado?>"
					</script>
				<?
				exit;
			}
		}
	}
	else
	{
		unlink($pathAbsolutoFirma);	
		unlink($pathAbsolutoFirma.".tsr");
		?>
			<script language="javascript">
				alert("Problemas cargando el XML de respuesta del proceso de solicitud de estampa de tiempo.");
				window.location.href = "../firma/<?=$pagina_sig?>?<?=$encabezado?>"
			</script>
		<?
		exit;
	}
}
//------------------------------------------------------------//
// FIN LOgica de solicitud de estampa de tiempo               //
//------------------------------------------------------------//


//ImplementaciOn de la verificacion de firma digital

$rutaTextoClaroSHA1 = $BODEGA_DOCUMENTOS . "/" .$path . "_" . $sgd_firrad_docsolic . ".sha1";
$rutaFirmaTextoClaroSHA1 = $BODEGA_DOCUMENTOS . "/" . $pathFirma;

$comandoVerificacion = $rutaComandoVerificacion . $nombreComandoVerificacion . " " . $rutaTextoClaroSHA1 . " " . $rutaFirmaTextoClaroSHA1 . " " . $rutaAutoridadesDeCertificacionDeConfianza . " " . $rutaComandoVerificacion . " " . $rutaEjecucionJDK;
$resultadoXMLValidacion = shell_exec($comandoVerificacion);

//Procesamos el XML de respuesta
$xmlDoc = new DOMDocument();
$respLoadXML = $xmlDoc->loadXML(str_replace("<br>", " " , $resultadoXMLValidacion));

if($respLoadXML)
{
	$Sucess = $xmlDoc->getElementsByTagName( "Sucess" );
	$SucessValue = $Sucess->item(0)->nodeValue;

	if($SucessValue==0)
	{
		$ErrorMessage = $xmlDoc->getElementsByTagName( "ErrorMessage" );
		$ErrorMessageValue = $ErrorMessage->item(0)->nodeValue;
	
		$ErrorCode = $xmlDoc->getElementsByTagName( "ErrorCode" );
		$ErrorCodeValue = $ErrorCode->item(0)->nodeValue;
	
		unlink($BODEGA_DOCUMENTOS . "/" . $pathFirma);
	
		?>
			<script language="javascript">
				alert("Se presentaron problemas en la verificaciOn de la firma.\n\nCOdigo de error: <?=trim($ErrorCodeValue)?> \nMensaje de error: <?=trim($ErrorMessageValue)?>");
				window.location.href = "../firma/<?=$pagina_sig?>?<?=$encabezado?>"
			</script>
		<?
	}
	else
	{
		$Signer = $xmlDoc->getElementsByTagName( "Signer" );
		$SignerValue = $Signer->item(0)->nodeValue;
	
		//Validamos la autenticidad del firmante: La cedula del usuario debe ser la misma cedula que se encuentra en el certificado digital
		if (!preg_match("/$usua_doc/i", $SignerValue))
		{
			unlink($BODEGA_DOCUMENTOS . "/" . $pathFirma);
			unlink($pathAbsolutoFirma.".tsr");
			?>
				<script language="javascript">
					alert("El nUmero de identificaciOn del usuario en el sistema Orfeo no corresponde con el nUmero de identificaciOn almacenado en el certificado digital.\nCEdula en Orfeo:<?=$usua_doc?>\nInformaciOn del Certificado digital:<?=trim($SignerValue)?> ");
					window.location.href = "../firma/<?=$pagina_sig?>?<?=$encabezado?>"
				</script>
			<? 
			
		}	
		else
		{
			$values2["SGD_FIRRAD_FIRMA"] = "'$pathFirma'";
			$values2["SGD_FIRRAD_FECHA"] = "sysdate";
			$values2["SGD_INFO_FIRMANTE"] = "'$SignerValue'";
			$recordWhere["RADI_NUME_RADI"] = $radicado;
			$recordWhere["USUA_DOC"] = $usua_doc;
			$rs=$db->update("SGD_FIRRAD_FIRMARADS", $values2, $recordWhere);
	
			if( $rs )
			{
				?>
					<script language="javascript">
						alert("Documento firmado y almacenado de forma satisfactoria.");
						window.location.href = "../firma/<?=$pagina_sig?>?<?=$encabezado?>"
					</script>
				<? 
			}
			else
			{	
				unlink($BODEGA_DOCUMENTOS . "/" . $pathFirma);
				unlink($pathAbsolutoFirma.".tsr");
				?>
					<script language="javascript">
						alert("No se pudo llevar a cabo el almacenamiento de la evidencia digital.");
						window.location.href = "../firma/<?=$pagina_sig?>?<?=$encabezado?>"
					</script>
				<?
			}
		}
	}
}
else
{
	unlink($BODEGA_DOCUMENTOS . "/" . $pathFirma);	
	?>
		<script language="javascript">
			alert("Problemas cargando el XML de respuesta del proceso de verificaciOn de Firma Digital.");
			window.location.href = "../firma/<?=$pagina_sig?>?<?=$encabezado?>"
		</script>
	<?	
}
?>
</body>
</html>